import {getCode,register,login,logout,autoLogin} from "api/api"
import {MessageBox,Message} from "element-ui"
import router from "router/router"
import getUUID from "util/uuid.js"
import config from "util/config.js"
export default {
    state:{
        UUID:getUUID(),
        userInfo:JSON.parse(localStorage.getItem("sph-userInfo")) || {},
        token:localStorage.getItem("sph-token")||""
    },
    getters:{},
    mutations:{
        login(state,userInfo){
            //首次登陆成功 和 自动登陆成功 都要做的工作!!!!!!
            state.userInfo = userInfo;
            state.token = userInfo.token
        },
        autoLogin(state,userInfo){
            state.userInfo = userInfo;
        }
    },
    actions:{
        //获取验证码
        async getCode(store,phone){
            const {code,data} = await getCode(phone);
            if(code === 200){
                //验证其实应该是会发到手机上的 但是我们后台已经关闭了和容联云通信的接口联系
                alert(data);
            }
            return code;
        },
        //进行注册操作
        async register(store, {phone,password,code,nickName}){
            try {
                const {code:reqCode,message} = await register({phone,password,code,nickName});
                if(reqCode === 200){
                    //注册成功 给个成功的提醒
                    await MessageBox.alert('点击确定按钮跳转到登陆界面', '注册成功', {
                        confirmButtonText: '确定'
                    })
                    //跳转到登录页
                    await router.replace("/login")
                }else{
                    Message.error(message)
                }
                return reqCode;
            }catch (err){
                Message.error(err.message)
            }
        },
        //进行登陆操作
        async login(store,{phone,password}){
            try {
                const {code:reqCode,message,data} = await login({phone,password});
                if(reqCode === 200){
                    //将登陆成功的用户信息存到仓库中 并持久化
                    store.commit("login",data)
                    //data中存在userInfo && token
                    //存sph-token 不用再stringify! 因为data.token本来就是字符串
                    localStorage.setItem("sph-userInfo",JSON.stringify(data))
                    localStorage.setItem("sph-token",data.token)
                    //跳转到主页
                    await router.replace("/home")
                }else{
                    Message.error(message)
                }
                return reqCode;
            }catch (err){
                Message.error(err.message)
            }
        },
        //退出登陆
        async logout(store){
            const {code:reqCode,message,data} = await logout();
            if(reqCode === 200){
                //置空userinfo  清除离线缓存
                store.commit("login",{})
                localStorage.removeItem("sph-userInfo")
                localStorage.removeItem("sph-token")
                //退出登陆成功  只有当处于支付相关的组件时才需要跳转到登陆页
                // const pages = ["center","pay","paysuccess","trade"]
                if(config.pages.includes(router.currentRoute.name.toLowerCase())){
                    await router.replace("/login")
                }
            }
            return reqCode;
        },
        //自动登陆  校验token是否合法!! 如果合法保持登陆状态  如果不合法则退出登录
        async autoLogin(store){
            try {
                //data:返回值没有token
                const {code,data} = await autoLogin();
                if(code === 200){
                    //将登陆成功的用户信息存到仓库中
                    store.commit("autoLogin",data);
                    localStorage.setItem("sph-userInfo",JSON.stringify(data))
                }else{
                    //退出登录
                    store.dispatch("logout")
                }
                return code;
            }catch (err){
                //退出登录
                store.dispatch("logout")
            }
        }
    }
}